using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Animator))]

// PLACE IN GAMEMASTER

public class TrollControllScript : MonoBehaviour {
	
//	private Animator anim;							// a reference to the animator on the character
//	private AnimatorStateInfo currentBaseState;			// a reference to the current state of the animator, used for base layer
//	private AnimatorStateInfo torsoCurrentState;
//	
	public float animSpeed = 1f;				// a public setting for overall animator animation speed
	
	private float jumpTimer = 0.0f;
//	public WeaponSystem weaponSystem;
//	public Transform fpsCamera;
//	
//	
	void Start ()
	{
		
		Listeners.inst().add(Channel.ON_MELEE, delegate(PlayerState state){
			state.getAnimator().SetBool("MeleeAttack", true);
		});
		
		Listeners.inst().add(Channel.ON_FIRE, delegate(PlayerState state){
			state.getAnimator().SetBool("RangedAttack", true);
		});
		
		Listeners.inst().add(Channel.ON_JUMP, delegate(PlayerState state){
			state.getAnimator().SetBool("Jumping", true);
			jumpTimer = Time.time + 0.1f;
		});
		
		Listeners.inst().add(Channel.ON_GROUNDED, delegate(PlayerState state){
			//if (Time.time > jumpTimer) {
				state.getAnimator().SetBool("Jumping", false);
			//}
		});
		
		
		Listeners.inst().add(Channel.ON_WEAPON_SWAP, delegate(PlayerState state){
			Animator anim = state.getAnimator();
			Entity weapon = state.getWeapon();
			
			anim.SetBool("Unarmed", false);
			anim.SetBool("KnifeEquipped", false);
			anim.SetBool("GunEquipped", false);
			anim.SetBool("SpudGunEquipped", false);
			anim.SetBool("MiscEquipped", false);
			
			Debug.LogWarning("Weapon: " + weapon);
			Debug.LogWarning("Weapontype: " + weapon.entityType);
						
				switch (weapon.entityType) {
					case 1:		anim.SetBool("MiscEquipped", 	true);			break;
					case 2:		anim.SetBool("KnifeEquipped", 	true);			break;
					case 3: 	anim.SetBool("KnifeEquipped", 	true);			break;
					case 4: 	anim.SetBool("GunEquipped", 	true);			break;
					case 5:		anim.SetBool("MiscEquipped", 	true);			break;
					case 6:		anim.SetBool("SpudGunEquipped", true);			break;
					case 7:		anim.SetBool("GunEquipped", 	true);			break;
					case 8:		anim.SetBool("MiscEquipped", 	true);			break;
					case 9:		anim.SetBool("MiscEquipped", 	true);			break;
					case 10:	anim.SetBool("MiscEquipped", 	true);			break;
					case 11:	anim.SetBool("KnifeEquipped", 	true);			break;

					default: 	anim.SetBool("Unarmed", 		true);			break;		
			}
		});
		
//		anim = GetComponent<Animator>();
//		if(anim.layerCount ==2)
//			anim.SetLayerWeight(1, 1);
//		anim.SetBool("Unarmed", true);
//		
//		Listeners.inst().add(Channel.ON_WEAPON_SWAP,
//			delegate(Entity weapon){
//
//				anim.SetBool("Unarmed", false);
//				anim.SetBool("KnifeEquipped", false);
//				anim.SetBool("GunEquipped", false);
//				anim.SetBool("SpudGunEquipped", false);
//
//				//Items som inte är ett vapen?
//				//Emil: Alla items är vapen om de går att hålla i.
//		
//				if (weapon != null) {
//			
//					if (weapon.entityType == 4){
//						anim.SetBool("GunEquipped", true);
//					}
//			
//					if (weapon.entityType == 3){
//						anim.SetBool("KnifeEquipped", true);
//					}
//			
//					if (weapon.entityType == 6){
//						anim.SetBool("SpudGunEquipped", true);
//					}
//					
//				}
//
//				else {
//					anim.SetBool("Unarmed", true);
//				}
//			
//			});
//		
//		Listeners.inst().add(Channel.ON_FIRE,
//			delegate(Entity e){
//			
//			anim.SetBool("RangedAttack", true);
//			
//		});
//		
//		Listeners.inst().add(Channel.ON_MELEE,
//			delegate(Entity e){
//			
//			anim.SetBool("MeleeAttack", true);
//			
//		});
//		
//		Listeners.inst().add(Channel.ON_JUMP,
//			delegate(Entity e){
//			
//			anim.SetBool("Jumping", true);
//			
//		});
//		
//		Listeners.inst().add(Channel.ON_GROUNDED,
//			delegate(Entity e){
//			
//			anim.SetBool("Jumping", false);
//			
//		});
//		
//		
//				
	}
//	
//	void FixedUpdate ()
//	{
//		float h = Input.GetAxis("Horizontal");				// setup h variable as our horizontal input axis
//		float v = Input.GetAxis("Vertical");				// setup v variables as our vertical input axis
//		anim.SetFloat("Vertical", v);							// set our animator's float parameter 'Speed' equal to the vertical input axis				
//		anim.SetFloat("Horizontal", h); 						// set our animator's float parameter 'Direction' equal to the horizontal input axis		
//		anim.speed = animSpeed;								// set the speed of our animator to the public variable 'animSpeed'
//		currentBaseState = anim.GetCurrentAnimatorStateInfo(0);	// set our currentState variable to the current state of the Base Layer (0) of animation
//		if(anim.layerCount ==2)		
//			torsoCurrentState = anim.GetCurrentAnimatorStateInfo(1);
//	}
//	
//	// Update is called once per frame
//	void Update () {
//		
//		//TURNING THE CHARACTER
//		Vector3 forward = fpsCamera.forward;
//		forward.y = 0f;
//		transform.localRotation = Quaternion.LookRotation(forward, Vector3.up);
//		
//		//JUMPING
//		/*if (Input.GetButtonDown("Jump")){
//			Debug.Log ("Jump!!");
//			anim.SetBool("Jumping", true);
//		}
//		
//		if(currentBaseState.nameHash == jumpState){
//			anim.SetBool("Jumping", false);
//		}*/
//		
//		//LEGS		
//		if ((Mathf.Abs (anim.GetFloat("Vertical"))) < 0.1 && (Mathf.Abs (anim.GetFloat("Horizontal"))) < 0.1 || anim.GetBool("Jumping") == true){
//			
//			anim.SetBool("Run", false);
//			anim.SetBool("BackPedal", false);
//			anim.SetBool("StrafeRight", false);
//			anim.SetBool("StrafeLeft", false);
//			
//		}
//		
//		else if (Mathf.Abs (anim.GetFloat("Vertical")) >= Mathf.Abs (anim.GetFloat("Horizontal"))){
//		
//			anim.SetBool ("StrafeRight", false);
//			anim.SetBool ("StrafeLeft", false);
//			
//			if(anim.GetFloat("Vertical") > 0.1) {
//				anim.SetBool("Run", true);
//			} 
//			
//			else {
//				anim.SetBool("BackPedal", true);
//			}
//		}
//		
//		else {	
//			anim.SetBool ("Run", false);
//			anim.SetBool ("BackPedal", false);
//			
//			if(anim.GetFloat("Horizontal") > 0.1) {
//				anim.SetBool("StrafeRight", true);
//			}
//			
//			else {
//				anim.SetBool("StrafeLeft", true);
//			}
//		}
//		
//				//AttackState Reset
//		
//		if (torsoCurrentState.nameHash == knifeMeleeState || torsoCurrentState.nameHash == revolverMeleeState || torsoCurrentState.nameHash == spudGunMeleeState){
//					anim.SetBool("MeleeAttack", false);
//			}
//		if (torsoCurrentState.nameHash == revolverRangedState || torsoCurrentState.nameHash == spudGunRangedState){
//					anim.SetBool("RangedAttack", false);
//			}
//	} 
//}
//		
//		//TORSO 	
//
//		//Attacking
//		/*if (Input.GetButtonDown("Fire1")){
//			anim.SetBool("RangedAttack", true);
//		}
//		
//		if (Input.GetButtonDown("Fire2")){
//			anim.SetBool("MeleeAttack", true);
//		}*/
//		
//		//Itemswapping
//		/*Entity weapon = weaponSystem.getWeapon();
//		
//		
//		if (weapon != null) {
//			if (weapon.entityType == 4){
//					anim.SetBool("GunEquipped", true);
//			}
//			if (weapon.entityType == 3){
//					anim.SetBool("KnifeEquipped", true);
//			}
//			if (weapon.entityType == 6){
//					anim.SetBool("SpudGunEquipped", true);
//			}
//		}
//		
//		if (Input.GetButtonDown("Swap")){
//			
//			anim.SetBool("Unarmed", false);
//			anim.SetBool("KnifeEquipped", false);
//			anim.SetBool("GunEquipped", false);
//			anim.SetBool("SpudGunEquipped", false);
//		
//		}*/
		

}